package com.lxk.service;

import com.lxk.pojo.Delivery;
import com.lxk.pojo.GoodsCom;
import com.lxk.pojo.Orders;
import com.lxk.vo.OrdersDetailModel;
import com.lxk.vo.OrdersInfoModel;
import com.lxk.vo.PageModel;
import com.lxk.vo.PointOrdersModel;
import com.lxk.vo.param.OrdersParam;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @author JohnSoybean
 * @create 2020/3/30 16:51
 * @description
 */
public interface OrdersService {

    /**
     * 获取订单总页数
     * @param num
     * @param ordersParam
     * @return
     */
    Integer getTotalPages(Integer num, OrdersParam ordersParam);

    /**
     * 获取订单分页
     * @param pageIndex
     * @param num
     * @param totalPages
     * @param ordersParam
     * @return
     */
    PageModel<OrdersInfoModel> selOrdersPage(Integer pageIndex, Integer num, Integer totalPages, OrdersParam ordersParam);

    /**
     * 按ID查找订单
     * @param ordersId
     * @return
     */
    Orders selOrdersById(Integer ordersId);

    /**
     * 按商户订单号查找订单信息
     * @param outTradeNo
     * @return
     */
    Orders selOrdersByOutTradeNo(String outTradeNo);

    /**
     * 更新订单
     * @param orders
     * @return
     */
    Integer updOrders(Orders orders);


    /**
     * 获取待发货订单总页数
     * @param num
     * @return
     */
    Integer getUnsendTotalPages(Integer num);

    /**
     * 获取待发货订单分页
     * @param pageIndex
     * @param num
     * @param totalPages
     * @param sort
     * @param order
     * @return
     */
    PageModel<OrdersInfoModel> selUnsendOrdersPage(Integer pageIndex, Integer num, Integer totalPages, Integer sort, Integer order);

    /**
     * 查找收货信息
     * @param deliveryId
     * @return
     */
    Delivery selDeliveryById(Integer deliveryId);


    /**
     * 从订单中查找收货信息
     * @param deliveryId
     * @return
     */
    Delivery selDeliveryFromPointOrders(Integer pointOrdersId);


    /**
     * 设置发货信息
     * @param ordersId
     * @param express
     */
    void setExpress(Integer ordersId, String expressNo);


    /**
     * 查询订单详情信息
     * @param orders
     * @return
     */
    OrdersDetailModel queryOrders(Integer ordersId);


    /**
     * 获取积分中奖待发货总页数
     * @param num
     * @return
     */
    Integer getPointOrderTotalPages(Integer num);

    /**
     * 获取订单分页
     * @param pageIndex
     * @param num
     * @param totalPages
     * @param sort
     * @param order
     * @return
     */
    PageModel<PointOrdersModel> selPointOrdersPage(Integer pageIndex, Integer num, Integer totalPages, Integer sort, Integer order);


    /**
     * 设置积分中奖发货信息
     * @param pointOrdersId
     * @param expressNo
     */
    void setPointOrdersExpress(Integer pointOrdersId, String expressNo);


    /**
     * 获取订单评价
     * @param ordersId
     * @return
     */
    GoodsCom getGoodsComByOrdersId(Integer ordersId);

    /**
     * 删除订单评价
     * @param goodsComId
     */
    void delGoodsCom(Integer goodsComId);



    /**
     * 获取商品销售额
     * @param begin
     * @param end
     * @param goodsId
     * @return
     */
    BigDecimal getGoodsSales(Integer goodsId, Date begin, Date end);


    /**
     * 获取店铺销售额
     * @param begin
     * @param end
     * @param shopId
     * @return
     */
    BigDecimal getShopSales(Integer shopId, Date begin, Date end);


    /**
     * 获取阶段的开始时间
     * @param type 1年 2月 3周 4日
     * @return
     */
    Date getBeginTime(Integer type);


}
